package org.paradise.dms.services;

import java.util.Date;
import java.util.List;

import org.paradise.dms.pojo.AllocationInfo;
import org.paradise.dms.pojo.Dormitory;
import org.paradise.dms.pojo.StudentBedLink;
import org.springframework.stereotype.Service;

import com.dheaven.framework.dao.DaoException;

/**
 * 
 * Description:学生住宿管理的服务类（包括：调换宿舍，退宿办理等）
 * 
 * 
 * Copyright (c) 2008-2009 paraDise sTudio(DT). All Rights Reserved.
 * 
 * @version 1.0 2009-3-24 上午10:41:59 李双江（paradise.lsj@gmail.com）created 1.1
 *          2009-3-24 下午 9:37:59 闫克 (kurtyan777@gmail.com) modified added
 *          searchStudentByStudentNo, getDormByApartIdAndDormName 2009-3-29 上午
 *          1:00:59 闫克 (kurtyan777@gmail.com) modified added
 *          allocateSingleStudent with startintime and endouttime
 * 
 */
@Service
public interface StudentLodgeMgrService {

	/**
	 * 
	 * Description:根据学号查找学生
	 * 
	 * @Version1.1 2008-3-24 下午 9:40:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentno
	 * @return Student List
	 */
	@SuppressWarnings("unchecked")
	public List searchStudentByStudentNo(String studentno) throws DaoException;

	/**
	 * 
	 * Description:根据公寓id, 宿舍号查找宿舍
	 * 
	 * @Version1.1 2008-3-24 下午 9:40:59 闫克 (kurtyan777@gmail.com) created
	 * @param apartid
	 * @param dormName
	 * @return Dormitory List
	 * @throws DaoException
	 */
	public List<Dormitory> getDormByApartIdAndDormName(String apartid, String dormName,int studentdormitorytpye) throws DaoException;

	/**
	 * 
	 * Description: 根据dormid去查询该宿舍的可住人数
	 * 
	 * @Version1.0 May 18, 2009 4:52:36 PM 李双江（paradise.lsj@gmail.com）创建
	 * @param dormid
	 * @return
	 */
	public int getAvailInDormAmountByDormId(String dormid);

	/**
	 * 
	 * Description:根据学生id, 宿舍id添加床位分配信息
	 * 
	 * @Version1.1 2008-3-26 上午 01:09:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentid
	 * @param dormitoryid
	 * @return statusMsg
	 * @throws DaoException
	 */
	public String allocateSingleStudent(int studentid, int dormitoryid) throws DaoException;

	/**
	 * 
	 * Description:根据学生id, 宿舍id, 入住时间, 住宿结束时间添加床位分配信息
	 * 
	 * @Version1.1 2008-3-28 上午 00:21:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentid
	 * @param dormitoryid
	 * @param studentbedstartintime
	 * @param studentbedendouttime
	 * @return statusMsg
	 * @throws DaoException
	 */
	public String allocateSingleStudent(int studentid, int dormitoryid, Date studentbedstartintime, Date studentbedendouttime) throws DaoException;

	/**
	 * 
	 * Description:根据两名学生各自id交换其床位
	 * 
	 * @Version1.1 2008-3-26 上午 01:09:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentidA
	 * @param studentidB
	 * @return statusMsg
	 * @throws DaoException
	 */
	public String swapStudents(int studentidA, int studentidB) throws DaoException;

	/**
	 * 
	 * Description:根据学生id, 宿舍id 将一名学生分配到新宿舍的空床上
	 * 
	 * @Version1.1 2008-3-26 上午 02:04:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentid
	 * @param dormitoryid
	 * @return statusMsg
	 * @throws DaoException
	 */
	public String transferSingleStudentToEmptyBed(int studentid, int dormitoryid) throws DaoException;

	/**
	 * 
	 * Description:根据学生id办理退宿
	 * 
	 * @Version1.1 2008-4-1 上午 01:17:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentid
	 * @return statusMsg
	 * @throws DaoException
	 * @throws DaoException
	 */
	public String studentCheckOut(int studentid) throws DaoException;

	/**
	 * 
	 * Description:根据学生id查询其分配信息
	 * 
	 * @Version1.1 2008-4-1 上午 01:26:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentid
	 * @return statusMsg
	 * @throws DaoException
	 * @throws DaoException
	 */
	public List<StudentBedLink> getStudentBedLinkByStudentId(int studentid) throws DaoException;

	/**
	 * 
	 * Description:根据宿舍id查询其信息
	 * 
	 * @Version1.1 2008-4-1 上午 01:28:59 闫克 (kurtyan777@gmail.com) created
	 * @param studentid
	 * @return statusMsg
	 * @throws DaoException
	 * @throws DaoException
	 */
	public List<Dormitory> getDormByDormId(int dormitoryid) throws DaoException;

	/**
	 * Description:根据学号查询学生住宿信息
	 * 
	 * @param studentno
	 * @return List
	 * @throws DaoException
	 */
	@SuppressWarnings("unchecked")
	public List queryStudentLodgeInfo(String studentno) throws DaoException;

	/**
	 * Description:根据sql语句进行批量退宿
	 * 
	 * @Version1.1 2008-4-5 上午 0:10:59 闫克 (kurtyan777@gmail.com) created
	 * @param sql
	 * @return
	 */
	public String studentBatchCheckout(String sql);

	/**
	 * 
	 * Description: 取预分配标记表信息
	 * 
	 * @Version1.0 2009-4-5 下午12:36:19 李双江（paradise.lsj@gmail.com）创建
	 * @return
	 */
	public List<AllocationInfo> getAllAllocationInfo();

	/**
	 * Description: 通过学生list, 宿舍list进行批量分配
	 * 
	 * @Version1.0 2009-4-5 下午23:17:59 闫克 （kurtyan777@gmail.com） 创建
	 * @param stuList
	 * @param dormitoryList
	 * @param startintime
	 * @param endouttime
	 * @return
	 */
	public String allocateBatchStudent(String[][] stuList, String[][] dormitoryList, Date startintime, Date endouttime,String order);

	/**
	 * Description: 根据学号查询住宿时间
	 * 
	 * @Version1.0 2009-4-18 21:06 闫克 （kurtyan777@gmail.com） 创建
	 * 
	 * @param studentno
	 * @return including studentid, studentname, studentno,
	 *         studentbedstartintime, studentbedendouttime,
	 *         dormitorydisplayname, dormitoryid
	 */
	@SuppressWarnings("unchecked")
	public List getLodgeTimeByStudentNo(String studentno);

	/**
	 * Description: 延长住宿时间
	 * 
	 * @Version1.0 2009-4-18 21:18 闫克 （kurtyan777@gmail.com） 创建
	 * @param studentid
	 * @param endouttime
	 * @return
	 */
	public String updateStudentLodgeTime(String studentid, Date startintime, Date endouttime);

	/**
	 * Description: 根据学生id数组进行批量退宿
	 * 
	 * @Version1.0 2009-4-26 01:16 闫克 （kurtyan777@gmail.com） 创建
	 * @param stuIdList
	 * @return 被退宿学生的数目
	 */
	public String studentBatchCheckout(String[] stuIdList);
	/**
	 * 即时分配页面,获得预分配标记的起始和结束日期
	 * @param id
	 * @return
	 */
	public List getPreassignDateByPreID(int id);
}
